import { Component, Vue } from 'vue-property-decorator';
import { set, get, find } from 'lodash'
import { isEmpty } from '@/utils/index'
@Component({
})
export class mixinNext extends Vue {

    /**
     * 级联查询下一级数据
     *
     * @param {Function} fun 查询方法
     * @param {*} params 查询参数
     * @param {string} nextDataName 下一级选项数据源名称
     * @param {string} nextFormName 下一级选项组件绑定值名称
     * @param {*} [{
     *         queryName 用于查询原有值是否在下一级选项中
     *     }={}]
     * @memberof mixinNext
     */
    updateNext(fun: Function, params: any, nextDataName: string, nextFormName: string, {
        queryName
    }: any = {}) {
        const me = this as any,
            // 获取下一级选项所选值
            value = get(me, nextFormName);
        // 清空下一级选项值
        set(me, nextFormName, '');
        // 情况下一级选项数据源
        set(me, nextDataName, []);
        // 如果参数存在才会请求下一级
        if (!isEmpty(params)) {
            fun(params).then(({ data }: any) => {
                // 设置下一级选项数据源
                set(me, nextDataName, data);
                // 如果下一级选项有值并且queryName存在
                if (value && queryName) {
                    const queryData = {};
                    // 设置查询调教
                    set(queryData, queryName, value);
                    // 根据查询调教查询值是否在下一级选项数据源中
                    const item = find(data, queryData);
                    if (item) {
                        // 如果在，重新设置值
                        set(me, nextFormName, value);
                    }
                }
            })
        }
    }
    pickerOptions: any = {
        shortcuts: [
            {
                text: "一年",
                onClick: (picker: any) => {
                    this.onSelectTime(picker, 3600 * 1000 * 24 * 365);
                }
            },
            {
                text: "二年",
                onClick: (picker: any) => {
                    this.onSelectTime(picker, 3600 * 1000 * 24 * 365 * 2);
                }
            },
            {
                text: "三年",
                onClick: (picker: any) => {
                    this.onSelectTime(picker, 3600 * 1000 * 24 * 365 * 3);
                }
            }
        ]
    };
    onSelectTime(picker: any, time: any) {
        const end = new Date(),
            start = new Date();
            end.setTime(end.getTime() + time);
        picker.$emit("pick", [start, end]);
    }

}